package com.moxi.mogublog.xo.service.xuan.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moxi.mogublog.commons.entity.xuan.CollegeSort;
import com.moxi.mogublog.commons.feign.PictureFeignClient;
import com.moxi.mogublog.utils.StringUtils;
import com.moxi.mogublog.xo.global.SysConf;
import com.moxi.mogublog.xo.mapper.xuan.CollegeSortMapper;
import com.moxi.mogublog.xo.service.xuan.CollegeSortService;
import com.moxi.mogublog.xo.utils.WebUtil;
import com.moxi.mogublog.commons.vo.college.CollegeSortVO;
import com.moxi.cloudblog.base.enums.EStatus;
import com.moxi.cloudblog.base.global.BaseSQLConf;
import com.moxi.cloudblog.base.global.BaseSysConf;
import com.moxi.cloudblog.base.serviceImpl.SuperServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class CollegeSortSortServiceImpl extends SuperServiceImpl<CollegeSortMapper, CollegeSort> implements CollegeSortService {

    @Autowired
    private CollegeSortService collegeSortService;

    @Resource
    private PictureFeignClient pictureFeignClient;

    @Resource
    private CollegeSortMapper collegeSortMapper;

    @Autowired
    private WebUtil webUtil;

    @Override
    public IPage<CollegeSort> getCollegePageList(CollegeSortVO collegeSortVO) {

        /**
         * 1.根据VO查询符合条件的对象，包括关键字以及一页显示多少
         * 2.根据查询结果，获取所有文件的唯一标识符
         * 3.根据唯一标识符，调用远程服务获取图片信息
         * 4.将图片信息存储到对象中，并返回
         */

        // 创建一个查询包装器，用于构建查询条件
        QueryWrapper<CollegeSort> queryWrapper = new QueryWrapper<>();
        // 如果提供了搜索关键字，则添加一个模糊查询条件
        if (StringUtils.isNotEmpty(collegeSortVO.getKeyword()) && !StringUtils.isEmpty(collegeSortVO.getKeyword().trim())) {
            queryWrapper.like(BaseSQLConf.COLLEGE_NAME, collegeSortVO.getKeyword().trim());
        }

        // 创建一个分页对象
        Page<CollegeSort> page = new Page<>();
        // 设置当前页码和每页大小，这些值来自传入的collegeVO对象
        page.setCurrent(collegeSortVO.getCurrentPage());
        page.setSize(collegeSortVO.getPageSize());
        // 添加一个等于条件的查询，假设所有查询的Subject都是启用状态
        queryWrapper.eq(BaseSQLConf.STATUS, EStatus.ENABLE);
        // 根据某个字段降序排序结果
        queryWrapper.orderByDesc(BaseSQLConf.SORT);
        // 执行分页查询，返回一个IPage对象，包含查询结果和分页信息
        IPage<CollegeSort> pageList = collegeSortService.page(page, queryWrapper);
        // 获取当前页的记录列表
        List<CollegeSort> list = pageList.getRecords();
        System.out.println(list.size());
        // 用于存储文件唯一标识符的字符串缓冲区
        final StringBuffer fileUids = new StringBuffer();
        // 遍历结果列表，收集所有文件的唯一标识符
        list.forEach(item -> {
            if (StringUtils.isNotEmpty(item.getFileUid())) {
                fileUids.append(item.getFileUid() + BaseSysConf.FILE_SEGMENTATION);
            }
        });
        // 声明一个变量来存储图片查询结果
        String pictureResult = null;
        // 存储图片映射的Map
        Map<String, String> pictureMap = new HashMap<>();

        // 如果收集到文件标识符，则调用远程服务获取图片信息
        if (fileUids != null) {
            pictureResult = this.pictureFeignClient.getPicture(fileUids.toString(), BaseSysConf.FILE_SEGMENTATION);
        }
        // 将图片查询结果转换为列表形式
        List<Map<String, Object>> picList = webUtil.getPictureMap(pictureResult);
        // 遍历图片列表，构建一个图片映射
        picList.forEach(item -> {
            pictureMap.put(item.get(SysConf.UID).toString(), item.get(SysConf.URL).toString());
        });
        // 再次遍历结果列表，为每个Subject对象设置图片列表
        for (CollegeSort item : list) {
            if (StringUtils.isNotEmpty(item.getFileUid())) {
                // 将文件标识符字符串转换为列表
                List<String> pictureUidsTemp = StringUtils.changeStringToString(item.getFileUid(), BaseSysConf.FILE_SEGMENTATION);
                List<String> pictureListTemp = new ArrayList<>();
                // 为每个文件标识符找到对应的图片URL，并添加到列表中
                pictureUidsTemp.forEach(picture -> {
                    pictureListTemp.add(pictureMap.get(picture));
                });
                // 设置Subject对象的图片列表
                item.setPhotoList(pictureListTemp);
            }
        }
        // 设置更新后的记录列表回分页对象
        pageList.setRecords(list);
        // 返回更新后的分页对象
        return pageList;

    }

    @Override
    public List<CollegeSort> getHotCollegeSortList() {

        QueryWrapper<CollegeSort> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(BaseSQLConf.STATUS, EStatus.ENABLE);
        queryWrapper.orderByDesc("click_count");
        queryWrapper.last("LIMIT 10");
        return collegeSortMapper.selectList(queryWrapper);
    }

    @Override
    public String addClickCount(String cid) {
        QueryWrapper<CollegeSort> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(BaseSQLConf.STATUS, EStatus.ENABLE);
        queryWrapper.eq("college_id", cid);
        CollegeSort collegeSort = collegeSortMapper.selectOne(queryWrapper);
        collegeSort.setClickCount(String.valueOf(Integer.valueOf(collegeSort.getClickCount()) + 1));
        return collegeSortMapper.updateById(collegeSort) > 0 ? "success" : "error";
    }
}
